#include "merchant.h"
#include "log.h"
#include "database.h"
#include "user.h"

//添加产品到数据库中
void merchant_add_product_database(int fd,MSG msg){
    PRODUCT *LG = (PRODUCT *)msg.data;
     DEBUG("收到的客户端 消息 添加产品到数据库  %s %s", LG->merchant_name, LG->product_name);

     char sql[256];
     // 根据客户端发来的数据构建SQL语句 查询数据库中是否有重名 产品
     sprintf(sql, "select * from product where merchant_name='%s' and product_name = '%s'", LG->merchant_name, LG->product_name);
     // 执行查询语句并且返回执行结果
     RET ret = database_query(db, sql);
     // 打印查询数据库的结果
     printdatabase(ret);

    //通过套接字fd找到 商家用户名（唯一）
    char queryUserSql[256];
    snprintf(queryUserSql, sizeof(queryUserSql), "SELECT name FROM merchant WHERE user_fd='%d';", fd);
    RET reeet = database_query(db, queryUserSql);
    if (reeet.row == 0) {
        printf("未找到对应的用户\n");
        MSG response = { .type = _no };
        snprintf(response.data, sizeof(response.data), "未找到对应的用户");
        send_msg_to_server(fd, response);
        return;
    }
    const char *userName = ret.result[ret.col]; // 第一行第一列 用户名

     DEBUG("服务器接收 添加产品 消息 并且检测数据库 的返回值是 %d 行 %d列\n",ret.row,ret.col);
     if (ret.row > 0  ) // 说明该 产品 在数据库中存在记录
     {
          
          msg.type = _no; // 添加失败
          memcpy(msg.data , "已经有相同产品 （换一个名字吧）",sizeof("已经有相同产品 （换一个名字吧）"));

          send(fd, &msg, sizeof(msg), 0); // 把结果返回给客户端
          return ;
     }
     else //说明没有记录
     {
        //执行添加操作
        char sqll[256];
        // 根据客户端发来的数据构建SQL语句 查询数据库中是否有重名 产品
        //sprintf(sqll, "select * from product where merchant_name='%s' and product_name = '%s'", LG->merchant_name, LG->product_name);
        sprintf(sqll,"INSERT INTO product(merchant_comment,merchant_name,product_name,product_val,product_num) VALUES ('%s','%s','%s','%d','%d');"\
        ,userName,LG->merchant_name,LG->product_name,LG->product_val,LG->product_num);
        exec_sql(db,sqll);
          
          msg.type = _yes; // 添加成功
          send(fd, &msg, sizeof(msg), 0); // 把结果返回给客户端
          return ;
     }
}

//删除产品 数据库中
void merchant_del_product_database(int fd,MSG msg){
    // 解析消息中的产品信息
    PRODUCT *LG = (PRODUCT *)msg.data;
    DEBUG("收到的客户端 消息 删除产品到数据库  %s %s", LG->merchant_name, LG->product_name);

    char sql[256];

    // 根据客户端发来的数据构建SQL语句 查询数据库中是否有该产品
    sprintf(sql, "SELECT * FROM product WHERE merchant_name='%s' AND product_name='%s'", LG->merchant_name, LG->product_name);
    RET ret = database_query(db, sql);
    if (ret.row == 0) {
        // 构建回复消息
        msg.type = _no; // 删除失败
        memcpy(msg.data, "产品不存在", sizeof("产品不存在"));
        send(fd, &msg, sizeof(msg), 0); // 把结果返回给客户端
        return;
    }

    // 根据客户端发来的数据构建SQL语句 删除产品
    sprintf(sql, "DELETE FROM product WHERE merchant_name='%s' AND product_name='%s'", LG->merchant_name, LG->product_name);
    exec_sql(db, sql);

    // 构建回复消息
    msg.type = _yes; // 删除成功
    send(fd, &msg, sizeof(msg), 0); // 把结果返回给客户端
}

//改 产品 信息 数据库中
void merchant_change_product_database(int fd,MSG msg){
     // 解析消息中的产品信息
    PRODUCT_CHANGE *LG = (PRODUCT_CHANGE *)msg.data;
    DEBUG("收到的客户端 消息 修改产品到数据库  %s %s -> %s", LG->merchant_name, LG->product_old_name, LG->product_new_name);

    char sql[256];

    // 根据客户端发来的数据构建SQL语句 查询数据库中是否有该产品
    sprintf(sql, "SELECT * FROM product WHERE merchant_name='%s' AND product_name='%s'", LG->merchant_name, LG->product_old_name);
    RET ret = database_query(db, sql);
    if (ret.row == 0) {
        // 构建回复消息
        msg.type = _no; // 修改失败
        memcpy(msg.data, "产品不存在", sizeof("产品不存在"));
        send(fd, &msg, sizeof(msg), 0); // 把结果返回给客户端
        return;
    }
    DEBUG(" 查询到 产品 存在 ");

    // 根据客户端发来的数据构建SQL语句 更新产品信息
    sprintf(sql, "UPDATE product SET product_name='%s', product_val='%d',product_num='%d' WHERE merchant_name='%s' AND product_name='%s'",
            LG->product_new_name, LG->product_val, LG->product_num, LG->merchant_name, LG->product_old_name);
    exec_sql(db, sql);

    // 构建回复消息
    msg.type = _yes; // 修改成功
    send(fd, &msg, sizeof(msg), 0); // 把结果返回给客户端
}

//查 所有 产品 数据库中  并 一条条发送给客户端
void merchant_findall_product_database(int fd,MSG msg){
    // 构建查询所有产品的SQL语句
    char sql[256] = "SELECT * FROM product";
    RET ret = database_query(db, sql);
    printdatabase(ret);

    // 如果查询结果为空，则返回失败消息
    if (ret.row == 0) {
        msg.type = _no;
        memcpy(msg.data, "没有找到任何产品", sizeof("没有找到任何产品"));
        send(fd, &msg, sizeof(msg), 0);
        return;
    }

    // 遍历查询结果并逐条发送给客户端
    for (int i = 0; i < ret.row; i++) {
        PRODUCT product;
        memcpy(&product.merchant_name, ret.result [((i+1) * ret.col + 2)], sizeof(product.merchant_name));
        memcpy(&product.product_name, ret.result[((i+1) * ret.col + 3)], sizeof(product.product_name));
        product.product_val = atoi(ret.result[(i+1) * ret.col + 4]);
        product.product_num = atoi(ret.result[(i+1) * ret.col + 5]);

        printf("%s\n",ret.result [((i+1) * ret.col + 2)]);
        // 构建消息并发送给客户端
        msg.type = _merchant_find_product;
        memcpy(msg.data, &product, sizeof(PRODUCT));
        send(fd, &msg, sizeof(msg), 0);
    }

    // 发送结束标志
    msg.type = over;
    send(fd, &msg, sizeof(msg), 0);
}






